package projectisd.server;

import projectisd.client.Leraar;

import java.util.List;

import javax.jdo.PersistenceManager;
import projectisd.server.PmfSingleton;

/** 
 * In deze klas word gezorgd dat Leraar Persistent wordt opgeslagen verwijderd
 * en geupdated wordt
 * @author Team 2
 * @version 7.0
 */

public class LeraarDAOJdo implements LeraarDAO {
	
	/** 
	 * In deze methode wordt Leraar peristent toegevoegd aan 
	 * de database
	 *@addLeraar
	 */
	
	public void addLeraar(Leraar leraar) {
		PersistenceManager pm = PmfSingleton.get().getPersistenceManager();
		try {
			pm.makePersistent(leraar);
		} finally {
			pm.close();
		}
	}
	
	/** 
	 * In deze methode wordt een naam geselecteerd uit de lijst listLeraren uit Leerling gehaald 
	 *@return (List<Leraar>) pm.newQuery(query).execute();
	 */

	@SuppressWarnings("unchecked")
	public List<Leraar> listLeraren() {
		PersistenceManager pm = PmfSingleton.get().getPersistenceManager();
		String query = "select from " + Leraar.class.getName();
		return (List<Leraar>) pm.newQuery(query).execute();
	}
	
	/** 
	 * In deze methode zorgt er voor dat een Leraar persistent wordt verwijderd
	 */
	
	public void removeLeraar(Leraar leraar) {
		PersistenceManager pm =PmfSingleton.get().getPersistenceManager();
		try {
			pm.currentTransaction().begin();

			// We don't have a reference to the selected Object.
			// So we have to look it up first,
			leraar = pm.getObjectById(Leraar.class, leraar.getDocNr());
			pm.deletePersistent(leraar);

			pm.currentTransaction().commit();
		} catch (Exception ex) {
			pm.currentTransaction().rollback();
			throw new RuntimeException(ex);
		} finally {
			pm.close();
		}
	}
	
	/** 
	 * In deze methode zorgt er voor dat een Leraar persistent wordt geupdated
	 */

	public void updateLeraar(Leraar leraar) {
		PersistenceManager pm = PmfSingleton.get().getPersistenceManager();
		
		String voornaam = leraar.getLeraarvoornaam();
		String achternaam = leraar.getLeraarachternaam();
		String afkorting = leraar.getAfkorting();
		String faculteit = leraar.getFaculteit();

		try {
			pm.currentTransaction().begin();
			// We don't have a reference to the selected Product.
			// So we have to look it up first,
			leraar = pm.getObjectById(Leraar.class, leraar.getDocNr());
			leraar.setLeraarvoornaam(voornaam);
			leraar.setLeraarachternaam(achternaam);
			leraar.setAfkorting(afkorting);
			leraar.setFaculteit(faculteit);

			pm.makePersistent(leraar);
			pm.currentTransaction().commit();
		} catch (Exception ex) {
			pm.currentTransaction().rollback();
			throw new RuntimeException(ex);
		} finally {
			pm.close();
		}
	}

}
